package xfuzzy.xfghl.replacement;

import java.util.Random;

import xfuzzy.xfghl.codification.DoubleChromosome;
import xfuzzy.xfghl.population.Population;

/**
 * Clase que realiza el reemplazo aleatorio en la poblacion
 * @author Alberto David Fernandez Fernandez
 * */

public class ReplacementRandom extends Replacement {
	
	/**
	 * Variable para la generacion de numeros aleatorios
	 * */
	private Random random;
	
	/**
	 * Constructor de la clase
	 * @param seed Semilla del generador de numeros aleatorios
	 * */
	
	public ReplacementRandom(long seed)  {
		
		this.random = new Random(seed);
	}
	
	public Random getRandom() {
		return random;
	}

	public void setRandom(Random random) {
		this.random = random;
	}

	/**
	 * Metodo que reemplaza los individuos en la poblacion
	 * @param population Poblacion de individuos
	 * @param child1 Nuevo individuo de reemplazo
	 * @param child2 Nuevo individuo de reemplazo
	 * @param father1 Individuo a reemplazar
	 * @param father2 Individuo a reemplazar
	 * */
	
	@Override
	public void replace(Population poblacion, DoubleChromosome child1, DoubleChromosome child2, DoubleChromosome father1, DoubleChromosome father2) {

		int indice1 = this.random.nextInt(poblacion.getPoblacionSize());
		poblacion.setIndividuo(indice1, child1);
		int indice2 = this.random.nextInt(poblacion.getPoblacionSize());
		while (indice1 == indice2)
			indice2 = this.random.nextInt(poblacion.getPoblacionSize());
		poblacion.setIndividuo(indice2, child2);
	}
}
